CREATE TRIGGER [dbo].[Ti_MakeDrug]
ON [dbo].[TmpDrugHavaleh]
FOR INSERT
AS
DECLARE @RowCount INT;
SELECT @RowCount = COUNT(1)
FROM Inserted;
IF @RowCount > 1
    RETURN;

IF NOT EXISTS( SELECT * FROM dbo.AnbarId WHERE A_Code = '999' )
    RETURN;
IF (
   (
       SELECT inserted.Make_Flag FROM inserted
   ) = 1
   )
   AND (
       (
           SELECT ISNULL(inserted.EditQty_Flag, 0)FROM inserted
       ) <> 1
       )
BEGIN
    DECLARE @IdHavaleh NUMERIC(18, 0);
    DECLARE @Sender VARCHAR(5);
    DECLARE @Reciver VARCHAR(5);
    DECLARE @Autoid NUMERIC(9);
    DECLARE @K_Code VARCHAR(15);
    DECLARE @MK_Code VARCHAR(15);
    DECLARE @K_Qty REAL;
    DECLARE @MK_Qty REAL;
    DECLARE @Status CHAR(1);
    DECLARE @StatusField CHAR(1);
    DECLARE @msg_num NUMERIC(18, 0);
    DECLARE @Sazman_Code VARCHAR(3);
    DECLARE @Darou_Flag CHAR(1);
    DECLARE @Price MONEY;
    DECLARE @Price_Forosh MONEY;
    DECLARE @Price_Kharid MONEY;
    DECLARE @StatusMainPrice MONEY;
    DECLARE @StatusForosh MONEY;
    DECLARE @SumDiffer MONEY;
    DECLARE @Takhfif CHAR(1);
    DECLARE @Point BIT;
    DECLARE @Hamrah BIT;
    DECLARE @Make BIT;
    DECLARE @Exp BIT;
    DECLARE @Serial BIT;
    DECLARE @CtrMojodi CHAR(1);
    DECLARE @Radif SMALLINT;
    DECLARE @EditQty Flag;
    DECLARE @KindFlag CHAR(1);
    DECLARE @Farma CHAR(1);
    DECLARE @S_PriceSazman CHAR(1);
    DECLARE @Grade_Code VARCHAR(3);
    DECLARE @Active CHAR(1);
    DECLARE @PriceSazman MONEY;
    DECLARE @SendRecive VARCHAR(3);
    -----------------------------------------------------------------------------------------------------------------------------
    SELECT @Sazman_Code = TmpDrugH.Sazman_Code,
           @KindFlag = TmpDrugH.Kind_Flag,
           @Grade_Code = TmpDrugH.Grade_Code
    FROM TmpDrugH
        INNER JOIN Inserted
            ON TmpDrugH.Id_Havaleh = Inserted.Id_Havaleh
    GROUP BY Sazman_Code,
             Kind_Flag,
             Grade_Code;
    SELECT @IdHavaleh = Id_Havaleh,
           @Sender = Sender,
           @Reciver = Reciver,
           @Autoid = AutoId,
           @K_Code = K_Code,
           @Radif = Radif,
           @K_Qty = K_Qty1
    FROM Inserted;
    -----------------------------------------------------------------------------------------------------------------------------
    DECLARE MakeFetch CURSOR FOR
    SELECT K_Code_M,
           Account_unit1,
           EditQty_Flag
    FROM Make_Kala
        JOIN dbo.KalaId
            ON KalaId.K_Code = Make_Kala.K_Code_M
    WHERE dbo.Make_Kala.K_Code = @K_Code;
    -----------------------------------------------------------------------------------------------------------------------------
    OPEN MakeFetch;
    -----------------------------------------------------------------------------------------------------------------------------
    -- خواندن اولين رکورد جدول همراه
    FETCH NEXT FROM MakeFetch
    INTO @MK_Code,
         @MK_Qty,
         @EditQty;
    -----------------------------------------------------------------------------------------------------------------------------
    WHILE @@FETCH_STATUS = 0
    BEGIN
        -- در صورت عوض شدن بايد تعداد همراه به همان نسبت کالاي اصلي اضافه شود
        -- 1=تعداد قابل عوض شدن است      
        -- 0=تعداد ثابت است
        -----------------------------------------------------------------------------------------------------------------------------
        IF @KindFlag = '1'
            SET @SendRecive = @Sender;
        ELSE
            SET @SendRecive = @Reciver;
        SELECT @Active = Active_Flag
        FROM Anbar
        WHERE K_Code = @MK_Code
              AND A_Code = @SendRecive;
        IF @Active = 0
        BEGIN
            SELECT @Exp = Exp_Flag,
                   @Serial = Serial_flag,
                   @Point = Point_Flag,
                   @Make = Make_Flag,
                   @Hamrah = Hamrah_Flag,
                   @Price_Forosh = Price_Forosh,
                   @Price_Kharid = Price_Kharid,
                   @Darou_Flag = Darou_Flag,
                   @Price = Price
            FROM
            (
                SELECT KalaId.K_Code,
                       KalaId.Name1,
                       KalaId.Name2,
                       Anbar.A_Code,
                       Anbar.Mojodi,
                       KalaId.Exp_Flag,
                       KalaId.Serial_flag,
                       KalaId.Point_Flag,
                       KalaId.Make_Flag,
                       KalaId.Hamrah_Flag,
                       KalaId.Barcode,
                       Anbar.Price_Forosh,
                       Anbar.Price_Kharid,
                       CASE
                           WHEN KalaId.Darou_Flag <> '6' THEN
                               KalaId.Darou_Flag
                           WHEN KalaId.Darou_Flag = '6' THEN
                           (
                               SELECT ISNULL(Price_Sazman.Status, 0)
                               FROM Price_Sazman
                               WHERE Sazman_Code = @Sazman_Code
                                     AND Price_Sazman.K_Code = KalaId.K_Code
                           )
                       END AS Darou_Flag,
                       CASE
                           WHEN KalaId.Darou_Flag <> '6' THEN
                               0
                           WHEN KalaId.Darou_Flag = '6' THEN
                           (
                               SELECT ISNULL(Price_Sazman.Price, 0)
                               FROM Price_Sazman
                               WHERE Sazman_Code = @Sazman_Code
                                     AND Price_Sazman.K_Code = KalaId.K_Code
                                     AND Status = '6'
                           )
                       END AS Price,
                       KalaId.Meli_Code
                FROM KalaId
                    INNER JOIN Anbar
                        ON KalaId.K_Code = Anbar.K_Code
                WHERE (Anbar.Active_Flag = '0')
                      AND (Anbar.A_Code = @SendRecive)
            ) PublicTable
            WHERE K_Code = @MK_Code;
            IF @EditQty = 1
                SET @MK_Qty = @MK_Qty * @K_Qty;
            EXEC @CtrMojodi = ChkCtrMojodi @MK_Code, @SendRecive, 0;
            -----------------------------------------------------------------------------------------------------------------------------
            IF (@Darou_Flag IS NULL)
               OR (@Darou_Flag = '')
                SET @Darou_Flag = '0';
            SET @StatusForosh = @Price_Forosh;
            SET @SumDiffer = 0;
            SET @StatusField = '';
            IF (@Sazman_Code = '01')
               AND (@Darou_Flag <> '1')
               AND (@Darou_Flag <> '2')
               AND (@Darou_Flag <> '6')
                SET @StatusField = '0';
            ELSE IF (@Sazman_Code = '02')
                    AND (@Darou_Flag <> '1')
                    AND (@Darou_Flag <> '2')
                    AND (@Darou_Flag <> '6')
                SET @StatusField = '3';
            ELSE IF (
                        (@Sazman_Code = '01')
                        OR (@Sazman_Code = '02')
                    )
                    AND
                    (
                        (@Darou_Flag = '1')
                        OR (@Darou_Flag = '2')
                    )
                SET @StatusField = @Darou_Flag;
            ELSE
            BEGIN
                EXEC @Farma = Sp_SetFarmaCope @MK_Qty, @Sazman_Code, @Grade_Code, '';
                SELECT @S_PriceSazman = Status
                FROM Price_Sazman
                WHERE Sazman_Code = @Sazman_Code
                      AND K_Code = @MK_Code;
                IF (@Farma <> '9')
                BEGIN
                    IF @Farma = '5'
                    BEGIN
                        IF @Darou_Flag = '0'
                            SET @StatusField = '5';
                        ELSE
                        BEGIN
                            SET @StatusMainPrice = 0;
                            IF @Darou_Flag <> '6'
                                SET @StatusField = @Darou_Flag;
                            ELSE
                            BEGIN
                                IF (@Price <> 0)
                                   AND (@Price < @StatusForosh)
                                BEGIN
                                    SET @StatusField = @S_PriceSazman;
                                    IF (@S_PriceSazman = '0' OR @S_PriceSazman = '3')
                                        SET @StatusMainPrice = 0;
                                    ELSE
                                        SET @StatusMainPrice = @StatusForosh;
                                    SET @PriceSazman = @Price;
                                    IF @PriceSazman > @StatusForosh
                                        SET @PriceSazman = 0;
                                    SET @StatusForosh = @PriceSazman;
                                    IF @PriceSazman <> 0
                                        SET @SumDiffer = (@MK_Qty * @StatusMainPrice) - (@MK_Qty * @PriceSazman);
                                    ELSE
                                    BEGIN
                                        SET @SumDiffer = 0;
                                        SET @StatusForosh = @Price_Forosh;
                                    END;
                                END;
                            END;
                        END;
                    END;
                    ELSE
                        SET @StatusField = '0';
                END;
                ELSE
                BEGIN
                    SET @StatusMainPrice = 0;
                    IF @Darou_Flag <> '6'
                        SET @StatusField = @Darou_Flag;
                    ELSE
                    BEGIN
                        IF (@Price <> 0)
                           AND (@Price < @StatusForosh)
                        BEGIN
                            SET @StatusField = @S_PriceSazman;
                            IF (@S_PriceSazman = '0' OR @S_PriceSazman = '3')
                                SET @StatusMainPrice = 0;
                            ELSE
                                SET @StatusMainPrice = @StatusForosh;
                            SET @PriceSazman = @Price;
                            IF @PriceSazman > @StatusForosh
                                SET @PriceSazman = 0;
                            SET @StatusForosh = @PriceSazman;
                            IF @PriceSazman <> 0
                                SET @SumDiffer = (@MK_Qty * @StatusMainPrice) - (@MK_Qty * @PriceSazman);
                            ELSE
                            BEGIN
                                SET @SumDiffer = 0;
                                SET @StatusForosh = @Price_Forosh;
                            END;
                        END;
                    END;
                END;
            END;
            -----------------------------------------------------------------------------------------------------------------------------
            SET @Radif = @Radif + 1;
            EXEC dbo.Add_One_Kala_Drug @msg_num,
                                       @IdHavaleh,
                                       '999',
                                       @Reciver,
                                       @MK_Code,
                                       @MK_Qty,
                                       @StatusField,
                                       @StatusForosh,
                                       @StatusMainPrice,
                                       @SumDiffer,
                                       @Exp,
                                       @Point,
                                       @Serial,
                                       @Takhfif,
                                       @Hamrah,
                                       @Make,
                                       @CtrMojodi,
                                       @Radif,
                                       @Autoid,
                                       0,
                                       @Price_Kharid;

            FETCH NEXT FROM MakeFetch
            INTO @MK_Code,
                 @MK_Qty,
                 @EditQty;
        END;
    END;
    -----------------------------------------------------------------------------------------------------------------------------
    CLOSE MakeFetch;
    DEALLOCATE MakeFetch;
END;